package com.songlanyun.modules.account.model.vo;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.hutool.core.util.DesensitizedUtil;
import cn.hutool.core.util.ReUtil;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.songlanyun.common.drive.ValueObject;
import com.songlanyun.common.enums.GoodsConstant;
import com.songlanyun.common.enums.MemberConstant;
import com.songlanyun.modules.account.entity.UserServiceAreaEntity;
import lombok.Data;
import org.apache.commons.lang.StringUtils;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.List;

/**
 * 会员详情
 */
@Data
public class AccountInfoVO implements ValueObject {


    {
        balance = BigDecimal.ZERO;
        integralAble = 0;
    }

    /**
     * 会员id
     */
    private Long id;

    /**
     * 用户其他角色   ----
     * 0：商家
     * 1：网红
     */
    private List<Integer> roleList;

    /**
     * 商家手机号    ----
     */
    private String shopMobile;

    /**
     * 商家logo   ----
     */
    private String logo;
    //*******个人信息*********
    /**
     * 手机号
     */
    private String mobile;

    public String getMobileDesensitized() {
        if (StringUtils.isNotEmpty(this.mobile)) {
            return DesensitizedUtil.mobilePhone(this.mobile);
        }
        return this.mobile;
    }

    /**
     * 昵称
     */
    private String nickname;

    public String getNicknameDesensitized() {
        boolean isMatch = ReUtil.isMatch("^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$", this.nickname);
        if (StringUtils.isNotEmpty(this.nickname) && isMatch) {
            return DesensitizedUtil.mobilePhone(this.nickname);
        }
        return this.nickname;
    }

    /**
     * 性别
     * 0：未知、
     * 1：男、
     * 2：女
     */
    private Integer gender;
    /**
     * 生日
     */
    private String birthday;
    /**
     * 区名称
     */
    private String area;
    /**
     * 市名称
     */
    private String city;
    /**
     * 省名称
     */
    private String province;
    /**
     * 真实姓名
     */
    private String realName;
    /**
     * 头像
     */
    private String headPhoto;
    /**
     * 个性签名
     */
    private String resume;
    /**
     * 邀请码
     */
    private String invitationCode;
    /**
     * 邀请人id
     */
    private String parentUserId;
    /**
     * 邀请人姓名 ----
     */
    private String invited;

    /**
     * 注册时间
     */
    private Date registerTime;
    /**
     * 用户来源
     * 0：App注册
     * 1：小程序注册
     */
    private MemberConstant.RegisterSource registerSource;

    //*******统计信息*********

    /**
     * 可用余额
     */
    private BigDecimal balance;
    /**
     * 积分
     */
    private Integer integralAble;

    /**
     * 是否是网红
     */
    private Boolean isCelebrity;


    //*******下级用户*********
    private List<AccountDownVO> accountDownVOS;

    /**
     * 是否被激活
     */
    private Boolean activating = false;

    /**
     * 最后被激活的时间
     */
    private Date lastActivatingTime;

    /**
     * 等级
     */
    private MemberConstant.MemberGrade grade;
}
